#include <iostream>
#include <string>

using std::cout;
using std::endl;
using std::cin;
using std::istream;
using std::string;

//所有的流对象都不能进行复制操作
void printStreamStatus(istream & is)
{
    cout << "cin's goodbit:" << is.good() << endl;
    cout << "cin's badbit:" << is.bad() << endl;
    cout << "cin's failbit:" << is.fail() << endl;
    cout << "cin's eofbit:" << is.eof() << endl;
}

int main()
{
    printStreamStatus(cin);

    int num;
    // >>  输入流运算符
    // 标准输入 -> 内存中的变量
    cin >> num;
    // 标准输出  <-  内存中的数据
    // <<  输出流运算符
    cout << "num:" << num << endl;

    printStreamStatus(cin);

    //当流的状态出现了问题时，应该要进行重置
    cin.clear();
    cout << ">> 重置流的状态了:" <<endl;
    //还要清空缓冲区
    cin.ignore(1000, '\n');
    printStreamStatus(cin);

    string line;
    cin >> line;//执行该操作时，必须要是有效状态才能正常执行

    cout << "line:" << line << endl;

    return 0;
}

